package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.system.domain.PoEventOpinionRelation;
import com.ruoyi.system.domain.PoPublicOpinion;
import com.ruoyi.system.domain.PublicOpinionEvents;
import com.ruoyi.system.domain.vo.*;

/**
 * 事件Service接口
 * 
 * @author ruoyi
 * @date 2021-06-08
 */
public interface IPublicOpinionEventsService 
{
    /**
     * 根据事件获取舆情（排除库）
     * @param eventId
     * @return
     */
    public List<String> getExcludeIdsByEventIdForDataBase(Long eventId);
    /**
     * 查询事件舆情关系列表
     *
     * @param poEventOpinionRelation
     * eventId 事件id
     * relation 事件和舆情
     * @return 事件舆情关系集合
     */
    public List<String> selectOpinionsByEventRelation(PoEventOpinionRelation poEventOpinionRelation);
    /**
     * 根据事件获取舆情（绑定库）
     * @param eventId
     * @return
     */
    public List<String> getMatchOpinionByEventIdForDataBase(Long eventId);
    /**
     * 查询事件
     * 
     * @param eventId 事件ID
     * @return 事件
     */
    public PublicOpinionEvents selectPublicOpinionEventsById(Long eventId);

    /**
     * 查询事件集合
     *
     * @param eventIds 事件ID
     * @return 事件
     */
    public List<PublicOpinionEvents> selectPublicOpinionEventsByIds(Long[] eventIds);

    /**
     * 查询事件列表
     * 
     * @param publicOpinionEvents 事件
     * @return 事件集合
     */
    public List<PublicOpinionEvents> selectPublicOpinionEventsList(PublicOpinionEvents publicOpinionEvents);

    /**
     * 新增事件
     * 
     * @param publicOpinionEvents 事件
     * @return 结果
     */
    public int insertPublicOpinionEvents(PublicOpinionEvents publicOpinionEvents);

    /**
     * 修改事件
     * 
     * @param publicOpinionEvents 事件
     * @return 结果
     */
    public int updatePublicOpinionEvents(PublicOpinionEvents publicOpinionEvents);

    /**
     * 批量删除事件
     * 
     * @param eventIds 需要删除的事件ID
     * @return 结果
     */
    public int deletePublicOpinionEventsByIds(Long[] eventIds);

    /**
     * 删除事件信息
     * 
     * @param eventId 事件ID
     * @return 结果
     */
    public int deletePublicOpinionEventsById(Long eventId);





    /**
     *
     * @param eventId
     * @param i
     * @return
     */
    List<PoPublicOpinion> getMainPublicOpinion(Long eventId, int i);







    List<NameValue> getEventTypeCount();



    /**
     * 新增事件舆情关系
     *
     * @param poEventOpinionRelation 事件舆情关系
     * @return 结果
     */
    public int insertPoEventOpinionRelation(PoEventOpinionRelation poEventOpinionRelation);



    /**
     * 查询事件舆情关系列表
     *
     * @param poEventOpinionRelation
     * eventId 事件id
     * relation 事件和舆情
     * @return 事件舆情关系集合
     */
    public List<String> selectOpinionIdsByEventRelation(PoEventOpinionRelation poEventOpinionRelation);

    /**
     * 根据事件id和舆情id
     * 修改舆情与事件的关系
     * @param poEventOpinionRelation
     * @return
     */
    int setOpinionEventRelation(PoEventOpinionRelation poEventOpinionRelation);


    int setRelationBatchEventRelation(String[] ids, String type, Long eventId);

    /**
     * 获取正负面信息趋势图
     * @param eventId
     * @return
     */
    List<NameListValue> getSentimentByPublishTimeByEventId(Long eventId);

    /**
     * 信息载体趋势图
     * @param eventId
     * @return
     */
    List<NameListValue> getMediaTypeByPublishTimeByEventId(Long eventId);

    /**
     * 首发媒体溯源
     * @param eventId
     * @return
     */
    List<PoPublicOpinion> getFirstMediaReleasedByEventId(Long eventId);

    /**
     * 情感载体分析
     * @param eventId
     * @return
     */
    List<NameListValue> getMediaTypeSensitiveDayNumEvent(Long eventId);

    /**
     * 媒体活跃排行榜（情感）
     * @param eventId
     * @return
     */
    List<OpMediaNameSensitiveDayNumVM> countSensitiveOpinionByMediaName(Long eventId);

    /**
     * 意见领袖排行（情感）
     * @param eventId
     * @return
     */
    List<OpAuthorSensitiveDayNumVM> countSensitiveAuthorOpinion(Long eventId);

    /**
     * 获取事件热词
     */
    List<NameValue> getKeywordsByEventId(Long eventId, int i);

    /**
     * 观点分析
     * @param eventId
     * @return
     */
    List<PoPublicOpinion> getViewpointAnalysis(Long eventId);

    /**
     * 舆情数量按省分组
     * @param eventId
     * @return
     */
    List<NameValue> getPublicOpinionCountGroupByProvinceOfEventId(Long eventId);

    /**
     * 事件演化趋势分析(信息趋势图)
     * @param eventId
     * @return
     */
    List<NameValue> getPublicOpinionCountGroupByDayOfEventId(Long eventId);

    /**
     * 事件关联人物
     * @param eventId
     * @param i
     * @return
     */
    List<NameValue> getPersonsByEventId(Long eventId, int i);

    /**
     * 事件关联机构
     * @param eventId
     * @param i
     * @return
     */
    List<NameValue> getOrganizationsByEventId(Long eventId, int i);

    /**
     * 事件关联区域
     * @param eventId
     * @param i
     * @return
     */
    List<NameValue> getLocationsByEventId(Long eventId, int i);

    /**
     * 舆情导读
     * @param eventId
     * @param i
     * @return
     */
    List<PoPublicOpinion> getGuideToReadingPublicOpinion(Long eventId, int i);

    /**
     * 信息总览
     * @param eventId
     * @return
     */
    OpTypeNumVM getAllInformation(Long eventId);


    List<NameListValue> groupSensitiveOpinionDayHour(String name, PublicOpinionEvents event, EventParameterVo parameter, List<String> bindIds);

    /**
     * 获取事件概要
     * @param eventId
     * @return
     */
    Map<String,Object> getEventSummary(Long eventId);
}
